package com.powernode.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.powernode.domain.OrdersList;
import com.baomidou.mybatisplus.extension.service.IService;
import com.powernode.model.ChangeStock;
import com.powernode.model.OrderConfirmParam;
import com.powernode.vo.OrderStatusCount;
import com.powernode.vo.OrderVo;

import java.util.Date;

/**
 * <p>
 * 订单表 服务类
 * </p>
 *
 * @author 付作巍
 * @since 2024-08-19
 */
public interface OrdersListService extends IService<OrdersList> {
    /**
     * 多条件分页查询订单
     * @param page page分页对象
     * @param orderNumber 订单编号
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param status 状态
     * @return 分页对象
     */
    Page<OrdersList> queryOrderPage(Page<OrdersList> page, String orderNumber, Integer status, Date startTime, Date endTime);

    /**
     * 根据订单编号查询详细订单信息
     * @param orderNumber 订单编号
     * @return
     */
    OrdersList queryOrderListsDetailByOrderNumber(Long orderNumber);

    /**
     * 查询订单各个状态数量
     * @return
     */
    OrderStatusCount queryMemberOrderStatusCount();

    /**
     * 分页查询会员订单列表
     * @param current 当前页码
     * @param size 每页显示数
     * @param status 状态:0全部，1待支付，2待发货，3待收货
     * @return
     */
    Page<OrdersList> queryMemberOrderPage(Long current, Long size, Long status);

    /**
     * 根据订单编号查询订单详情信息
     * @param orderNumber 订单编号
     * @return
     */
    OrdersList queryMemberOrderDetailByOrderNumber(String orderNumber);

    /**
     * 会员确认收货
     * @param orderNumber 订单编号
     * @return
     */
    Boolean receiptMemberOrder(String orderNumber);

    /**
     * 删除已经完成的订单
     * @param orderNumber 订单编号
     * @return
     */
    Boolean removeMemberOrderByOrderNumber(String orderNumber);

    /**
     * 查询会员确认订单页面数据
     * @param orderConfirmParam 订单确认页面参数对象
     * @return
     */
    OrderVo queryMemberOrderConfirmVo(OrderConfirmParam orderConfirmParam);

    /**
     * 会员提交订单
     * @param orderVo 订单确认对象
     * @return
     */
    String submitOrder(OrderVo orderVo);

    /**
     * 订单回滚
     * @param ordersList 订单
     * @param changeStock 修改库存数量
     */
    void orderRollBack(OrdersList ordersList, ChangeStock changeStock);
}
